热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可能会|后果_如何平衡SQL中的安全与性能?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何平衡SQL中的安全与性能?相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何平衡SQL中的安全与性能?相关的知识,希望对你有一定的参考价值。



​如何平衡SQL中的安全与性能?_数据库

如果你发现自己以某种方式置身于数据库的世界中,想必你已经对数据库的安全和性能有了一些了解。数据库管理系统确实为数据库带来了好处,但你是否考虑过需要从安全性和性能角度进行权衡,以便使你的选择最有效?这正是本文要探讨的。

PART 01

安全和性能是否联系在一起?

首先要考虑一个事实,性能和安全密切相关。出现这种情况的主要原因是,开发人员,无论是初级的还是资深的,在其职业生涯的某个时刻开始意识到:


  • 安全性提高时,实现性能目标通常会变得有点困难(也就是说,开发人员通常需要“千方百计”来实现他们的目标)
  • 提高性能时,有时会以安全为代价——比如说,放宽权限等等。

用Mark Eldridge制作的图做下说明:

​如何平衡SQL中的安全与性能?_sql_02

希望你能通过这种图理解前面所要表达的意思。当然,这个箭头反映的是密码管理中安全性和便利性的权衡,这与SQL中的安全性和性能没有直接关系,但是两者可以进行类比。提高安全性通常意味着会把性能相关的任务变得更加困难,反之亦然。

PART 02

SQL中的安全性和性能

现在,你可能想知道,SQL中,性能和安全性是如何融合在一起的?一句话,显而易见——当其中一个方面(安全性或性能)提升时,另一个则需要额外的维护措施,反之亦然。以下是数据库管理员和开发人员在考虑安全性和性能时通常会想到的一些主要措施:

​如何平衡SQL中的安全与性能?_数据库_03

如上表所示,所有的选择通常都有收益,或者利弊皆有。在这个领域,你还需要考虑另一个问题:你是否具备执行操作所需的知识?在性能领域没有必要的知识可能并不一定是坏事(学习这个领域的知识很快,如果有一天你的查询表现不佳,一两天后的结果可能会大不相同),但是,在安全领域,每件事都在改变并且会比预期更快地咬你一口:忽略了一个必要的方面或者错误地引入,我们可以向你保证,日后当数据窃贼来敲门时,你会记住你的错误(考虑权限的例子:向一个用户授予太多权限是危险的,应该只授予绝对必要的权限)。

一旦出现性能或安全问题,你如何知道怎样纠正错误?这可不像乍看起来那么简单,所以一些额外的知识会有所帮助。

PART 03

性能和安全问题的后果

SQL世界中性能主要与创建、读取、更新或删除(CRUT)的执行性能相关,而安全性通常与数据库实例的整体安全性有关,但是当出现错误时,如何确定先前采取的哪些操作对数据库有害,为什么?

谢天谢地,答案相当简单——看看你最近采取的行动的后果,再看看下表。下表将问题开始前可能采取的措施与最可能的后果做了关联:

​如何平衡SQL中的安全与性能?_sql_04

正如你所见到的,当确定导致问题的操作时,特定选项的结果应该是一个很好的起点。每个选项都有自己的好处,但每个选项也会带来一些影响,所以首先要了解需要采取的步骤,评估可用的选项,并谨慎选择。

学习自己需要做的每件事,尤其是在处理性能和安全性方面的工作,特别是你没有太多数据库领域的背景知识时,可能会非常困难:在这种情况下,首先,弄清楚正在使用什么样的数据库管理系统,然后阅读性能或安全领域的文档(或两者都读,取决于需要)。

一旦确定了性能和安全性的组合,就可以考虑使用SQL客户端:查询的性能与构建方式密切相关,SQL客户端不仅可以帮助构建出更好的SQL查询,而且好的SQL客户端通过提供一系列附加选项,比如与团队共享查询结果的选项等,从而使处理数据库实例中的数据变得轻而易举。

PART 04

SQL客户端的安全与性能

如前所述,正确构建的SQL客户端包含非常广泛的职责,包括自动完成查询、根据查询的输出生成图表等。

SQL客户端不仅使调整数据库实例的性能更容易(例如,能密切关注表结构以确保数据库始终保持高性能),而且还允许执行其他操作,比如,与同事或队友分享编写的查询。就如同下面这样:

​如何平衡SQL中的安全与性能?_数据库_05

​如何平衡SQL中的安全与性能?_客户端_06

使用恰当的SQL客户端时,能够访问一些非常有价值的信息,比如有助于你密切关注数据库模式(请参见上文),帮你处理最宝贵的数据,或者自动完成查询,从而帮你提高数据库性能。

当然,数据库实例的安全性仍然由你负责:对于小型开发团队,通过数据库安全检查清单就够了。或者,看一下所选择的数据库管理系统的安全部分,因为许多与安全相关的选项都取决于所使用的是哪种数据库管理系统。

安全性和性能的良好组合能够充分保护你免受威胁,同时避免来自数据库开发人员的抱怨或客户的投诉。如果数据库和web应用程序协调一致,则应:


  • 初始的(root)账号使用强密码锁
  • 不向用户提供超出严格必要的权限(例如,只从数据库读取的用户应该只拥有SELECT权限等)
  • 通过使用防火墙或开发人员遵循恰当的安全程序,能够抵御比如SQL注入等基本的安全威胁
  • 能够在不妨碍其它操作的情况下快速完成web应用程序所需的全部查询(SQL客户端非常适合这种情况:客户端通常提供完成查询所需的毫秒级时间,因此,如果哪个查询速度慢,就从那里开始。)
  • 不会降低用户体验

上面给出的建议中,如果能将哪怕一小部分作为日常工作的一部分,都有助于你在SQL中找到性能和安全性的良好结合。

当然说起来容易做起来难,但按照本文和所选数据库管理系统文档中给出的建议,一切都能变得轻而易举。别忘了,在数据库领域,事物的发展和变化日新月异,今天有用的东西明天可能就不一定有用了——为了达到精益求精,扩展两个领域的知识,并根据具体情况采用恰当的措施。


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
author-avatar
981378224_014f95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有